一个链表的建立搞了我几天,为什么星号这时候要加,这时候不要加一度让我放弃数据结构,对于指针,结构体和函数才发现是真的还没有搞懂其真正的原理,现在终于觉得应该是明白了,以下为源码。
- 对象为结构体指针
头插法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using namespace std;
struct List{ //用结构体构造链表节点
int data; //数据域
struct List *Next; //指针域
};
//头插法
void CreatL(List *L) //加*表示是结构体指针
{
List *p;
srand(time(0)); //设定随机种子为系统时间
for(int i=0;i<LENGTH;++i)
{
p = new List; //用new申请空间
//也可用 p = (List *)malloc(sizeof(List))
p->data = random(); //指针内容用 -> 来调用
p->Next = L->Next; //原尾部放置于P节点后
L->Next = p; //p节点放置于头结点后
}
}
void ShowL(List *L){
List *p;
p = L;
while(p)
{
cout<<p->data<<endl;
p = p->Next;
}
}
int main(){
List *L;
L = (List *)malloc(sizeof(List)); //为指针申请相应空间
L->data = LENGTH; //存放链表长度
L->Next = NULL; //尾部为空指针
CreatL(L);
ShowL(L);
}尾插法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using namespace std;
struct List{ //用结构体构造链表节点
int data; //数据域
struct List *Next; //指针域
};
//尾插法
void CreatL(List *L)
{
List *p,*temp;
temp = L; //头结点地址赋值给中介指针
srand(time(0));
for(int i=0;i<LENGTH;i++){
p = (List *)malloc(sizeof(List));
p->data = random();
temp->Next = p; //P节点接在中介节点后
temp = p; //中介节点移动至末尾节点
}
temp->Next = NULL; //末尾节点赋值为空
}
void ShowL(List *L){
List *p;
p = L;
while(p)
{
cout<<p->data<<endl;
p = p->Next;
}
}
int main(){
List *L;
L = (List *)malloc(sizeof(List)); //为指针申请相应空间
L->data = LENGTH; //存放链表长度
L->Next = NULL; //尾部为空指针
CreatL(L);
ShowL(L);
}
- 对象为结构体
头插法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using namespace std;
struct List{ //用结构体构造链表节点
int data; //数据域
struct List *Next; //指针域
};
//头插法
List CreatL(List L) //定义函数返回类型为List
{
List *p;
srand(time(0));
for(int i=0;i<LENGTH;++i)
{
p = new List;
p->data = i;
p->Next = L.Next;
L.Next = p;
}
return L;
}
void ShowL(List L){
List *p;
p = &L;
while(p)
{
cout<<p->data<<endl;
p = p->Next;
}
}
int main(){
List L; //声明结构体,无需再申请空间
L.data = LENGTH; //用 . 进行结构体内容调用
L.Next = NULL; //末尾地址赋值为空
L = CreatL(L); //结构体必须接收函数反馈结果
ShowL(L);
}尾插法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using namespace std;
struct List{ //用结构体构造链表节点
int data; //数据域
struct List *Next; //指针域
};
//尾插法
List CreatL(List L)
{
List *p,*temp;
temp = &L;
srand(time(0));
for(int i=0;i<LENGTH;i++){
p = (List *)malloc(sizeof(List));
p->data = i;
temp->Next = p;
temp = p;
}
temp->Next = NULL;
return L;
}
void ShowL(List L){
List *p;
p = &L;
while(p)
{
cout<<p->data<<endl;
p = p->Next;
}
}
int main(){
List L; //声明结构体,无需再申请空间
L.data = LENGTH; //用 . 进行结构体内容调用
L.Next = NULL; //末尾地址赋值为空
L = CreatL(L); //结构体必须接收函数反馈结果
ShowL(L);
}